\chapter{CRE2正则库简介}

\section{CRE2正则库}
CRE2正则库是对由Google公司Rob Pike和Russ Cox用C++实现的开源正则表达式库RE2的
C语言封装，以便在ANSI C中能够使用RE2库的主要功能。RE2是一个简单、快速、安全的
正则表达式库，它的解析时间线性可控，不存在栈溢出风险。它可以作为PCRE、Perl和
Python等回溯正则库的一个替代品。

\section{CRE2正则库的安装}

在CRE2的官网(\url{https://marcomaggi.github.io/docs/cre2.html/})，详细说明了其
下载安装和使用方法。

在此，仅以Debian Ubuntu 22.04下的安装为例进行说明。

\subsection{安装RE2 C++正则引擎}

CRE2正则库是对C++版RE2正则引擎的C语言封装，为了能够编译CRE2的源码，需要先安装
RE2正则引擎。为此，可以在终端执行：

\begin{minipage}{0.90\textwidth}
  \begin{shell}
    $ sudo apt update
    $ sudo apt install libre2-dev
  \end{shell}
\end{minipage}

\subsection{安装CRE2库}

在CRE2源码仓库的INSTALL文件中，详细给出了不同工具链下的安装方式，以下是在Ubuntu
下，基于GCC工具链的安装过程：

\begin{minipage}{0.90\textwidth}
  \begin{shell}
    $ cd cre2-0.4.0
    $ mkdir build
    $ cd build
    $ ../configure
    $ make
    $ make check
    $ make install
  \end{shell}
\end{minipage}

其中，\shellinline{cd cre2-0.4.0}中的文档目录需要根据版本按实际情况进行调整。
如需多线程编译，也可以用类似\enquote{\shellinline{make -j4 all && make -j4 check}}命令
进行编译，以加快编译速度。另外，如果没有管理员权限，则需要执行%
\enquote{\shellinline{sudo make install}} 进行安装。

如果执行CRE2编写的程序时，出现类似%
\enquote{\texttt{error while loading shared libraries: libcre2.so.0: cannot open
shared object file: No such file or directory}}的无法找到动态链接库的错误，则请在终端执行 %
\enquote{\shellinline{sudo ldconfig}}，以便程序执行时能够正确链接到动态链接库。

\section{构建基于CRE2正则库的源代码}

在构建基于CRE2正则库的\cl 源代码时，需要添加\enquote{\cinline{-lcre2}}链接参数，以实现与
libcre2.a库的链接。建议使用如下Makefile实现项目管理：

\begin{minipage}{0.90\textwidth}
  \basemakefile{google-cre2/codes/int-range/Makefile}
\end{minipage}
